#include<bits/stdc++.h>
using namespace std;
const int NN=1004;
int d[NN][NN],s[NN],t[NN],w[NN],p[NN],val[NN];
bool flag[NN][NN];
vector<int>g[NN],g2[NN];
void dfs(int u,int fa,int root)
{
	for(int i=0;i<g[u].size();i++)
	{
		int v=g[u][i];
		if(v==fa)
			continue;
		d[root][v]=d[root][u]+1;
		dfs(v,u,root);
	}
}
int main()
{
	freopen("shu.in","r",stdin);
	freopen("shu.out","w",stdout);
	int n,m,q;
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	for(int i=1;i<=q;i++)
		scanf("%d%d%d",&s[i],&t[i],&w[i]);
	for(int i=1;i<=m;i++)
		scanf("%d%d",&p[i],&val[i]);
	for(int i=1;i<=n;i++)
		dfs(i,0,i);
	for(int i=1;i<=m;i++)
		for(int j=1;j<=m;j++)
			if(d[p[i]][p[j]]<=val[i])
				g2[j].push_back(i);
	for(int i=1;i<=n;i++)
	{
		queue<int>q;
		for(int j=1;j<=m;j++)
			if(d[p[j]][i]<=val[j])
			{
				flag[i][j]=true;
				q.push(j);
			}
		while(q.size())
		{
			int u=q.front();
			q.pop();
			for(int j=0;j<g2[u].size();j++)
			{
				int v=g2[u][j];
				if(!flag[i][v])
				{
					flag[i][v]=true;
					q.push(v);
				}
			}
		}
	}
	for(int i=1;i<=q;i++)
	{
		int minn=d[s[i]][t[i]];
		for(int j=1;j<=m;j++)
			if(flag[t[i]][j])
				minn=min(minn,d[s[i]][p[j]]);
		if(minn<=w[i])
			puts("YES");
		else
			puts("NO");
	}
	return 0;
}
